#include "stdafx.h"
#include "msg/tasknotification.hpp"

namespace JHCPP
{
	namespace msg
	{
		//////////////////////////////////////////////////////////////////////////
		//CTaskNotification
		//////////////////////////////////////////////////////////////////////////
		CTaskNotification::CTaskNotification(CTask* pTask) : m_pTask(pTask)
		{
			if (m_pTask) 
				m_pTask->add();
		}

		CTaskNotification::~CTaskNotification()
		{
			if (m_pTask) 
				m_pTask->release();
		}

		CTask* CTaskNotification::task() const
		{
			return m_pTask;
		}


		//////////////////////////////////////////////////////////////////////////
		//CTaskStartedNotification
		//////////////////////////////////////////////////////////////////////////
		CTaskStartedNotification::CTaskStartedNotification(CTask* pTask) : CTaskNotification(pTask)
		{
		}

		CTaskStartedNotification::~CTaskStartedNotification()
		{
		}


		//////////////////////////////////////////////////////////////////////////
		//CTaskCancelledNotification
		//////////////////////////////////////////////////////////////////////////
		CTaskCancelledNotification::CTaskCancelledNotification(CTask* pTask) : CTaskNotification(pTask)
		{
		}

		CTaskCancelledNotification::~CTaskCancelledNotification()
		{
		}


		//////////////////////////////////////////////////////////////////////////
		//CTaskFinishedNotification
		//////////////////////////////////////////////////////////////////////////
		CTaskFinishedNotification::CTaskFinishedNotification(CTask* pTask) : CTaskNotification(pTask)
		{
		}

		CTaskFinishedNotification::~CTaskFinishedNotification()
		{
		}


		//////////////////////////////////////////////////////////////////////////
		//CTaskFinishedNotification
		//////////////////////////////////////////////////////////////////////////
		CTaskFailedNotification::CTaskFailedNotification(CTask* pTask, const CException& exc)
		: CTaskNotification(pTask), m_pException(exc.clone())
		{
		}

		CTaskFailedNotification::~CTaskFailedNotification()
		{
			delete m_pException;
		}

		const CException& CTaskFailedNotification::reason() const
		{
			return *m_pException;
		}


		//////////////////////////////////////////////////////////////////////////
		//CTaskProgressNotification
		//////////////////////////////////////////////////////////////////////////
		CTaskProgressNotification::CTaskProgressNotification(CTask* pTask, float progress)
		: CTaskNotification(pTask),
		m_progress(progress)
		{
		}

		CTaskProgressNotification::~CTaskProgressNotification()
		{
		}

		float CTaskProgressNotification::progress() const
		{
			return m_progress;
		}

	}//end of namespace JHCPP
}//end of namespace msg
